package article5.dependency.injection;

import java.util.List;
import java.util.Objects;

/**
 * 拼写检查
 *
 * 静态工具类和Singleton类不适合于需要引用底层资源的类
 * 当创建一个新的实例时，就将该资源传到构造器种。这就是依赖注入（dependency injection）形式
 * 如下：词典是拼写检查器的一个依赖（dependency），在创建拼写检查器时就将词典注入其中
 *
 * 总而言之，不要用Singleton和静态工具类来实现依赖一个或多个底层资源的类，且该资源的行为会影响到该类的行为
 * 也不要直接用这个类来创建这些资源 而应该将这些资源或者工厂传给构造器（或者静态工厂，或者构建器），
 * 通过它们来创建类 这个实践就被称作依赖注入，它极大地提升了类的灵活性、可重用性和可测试性
 *
 * @author cctv
 */
public class SpellChecker {
    private final  Lexicon dictionary;


    public SpellChecker(Lexicon dictionary) {
        this.dictionary = Objects.requireNonNull(dictionary);
    }



    public boolean isValid(String word){
        //  Remainder omitted...
        return true;
    }
    public List<String> suggertions(String typo){
        // code..
        return null;
    }

}
